iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Python

pythonGUI學習筆記系列 第 4

Day 4: PySide6 訊號與槽 (Signals & Slots)

  • 分享至 

  • xImage
  •  

目標

  • 了解訊號(Signal)與槽(Slot)
  • 基本用法

了解訊號(Signal)與槽(Slot)

  • 訊號(Signal):是PySide6 中用來發出事件通知的機制,例如設置了一個按鈕,當按下按鈕後,按鈕會發出一個訊號。
  • 槽(Slot) : 是一個接收訊號的函數,當訊號發出時,與它連接的槽(函數)會被執行。

基本用法

  1. 首先,第一個基本的範例,創建一個按鈕,當按下時會發送信號並觸發槽函數,按鈕被點擊後,會顯示「按鈕被點擊了」。
from PySide6.QtWidgets import QApplication , QMainWindow , QPushButton

class Mywindow(QMainWindow):
    def __init__(self):
        super().__init__()

        #創建並設置按鈕
        btn = QPushButton("按鈕",self)
        btn.setGeometry(0,0,100,100)

        #觸發
        btn.clicked.connect(self.print)

    #槽函數:print
    def print(self):
        print("按鈕被點擊了")


if __name__ == "__main__":
    app = QApplication([])      
    window = Mywindow()
    window.show()               
    app.exec()           
  • btn.clicked.connect(self.print):這行程式碼將按鈕的 clicked 訊號與 print 槽連接起來,當按鈕被點擊時,訊號會觸發 print 函數,顯示按鈕被點擊了。
  1. 第二個範例是當 QLineEdit 的內容發生變化時,QLabel 會隨之更新並顯示相應的內容。
from PySide6.QtWidgets import QApplication , QMainWindow , QLineEdit , QLabel

class Mywindow(QMainWindow):
    def __init__(self):
        super().__init__()

        #創建和設置元件
        self.LineEdit = QLineEdit(self)
        self.LineEdit.setGeometry(0,0,100,100)
        self.Label = QLabel("label",self)
        self.Label.setGeometry(100,0,100,100)
        
        #改變LineEdit輸入時,會發出信號
        self.LineEdit.textChanged.connect(self.changeLabel)

    #槽函數:changeLabel
    def changeLabel(self):
       self.Label.setText(self.LineEdit.text())


if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()
  • self.LineEdit.textChanged.connect(self.changeLabel) : 當輸入改變時會發出信號,觸發changeLabel改變Qlabel。
  • #self.LineEdit.text() : 獲取LineEdit目前的文字 。

https://ithelp.ithome.com.tw/upload/images/20240913/20169254YzFeBD1E3p.png

  1. 除了上述兩個範例之外,每個元件還有其他發送信號的方法,例如 QLineEdit 也可以使用 returnPressed 信號,當用戶按下 Enter 鍵時觸發。

總結

  • 訊號與槽 (Signals & Slots) 是甚麼並使用。
  • 每個元件有多種發送信號的方式

上一篇
Day 3: PySide6 的三個基礎元件
下一篇
Day 5: PySide6 菜單(Menu)和工具欄(Toolbar)
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言